]]Chupakabra[[, я понял. Крч на костылях придется лепить. Попробуй при выборе героя добавлять геройские абилки, а потом блочить или удалять их. Думаю, так можно добавить до 7 штук. Через ро не получается больше 5.
Если не получится - пробуй делать полностью триггерно с помощью спеллбука.
А касательно остальной части, если UnitUserData нигде не используется, создаешь массив юнитов и отрядов. Массив юнитов забиваешь своими капитанами. В UnitUserData капитана пихаешь его порядковый номер в массиве. Создаешь группу юнитов для этого капитана.
Добавление через каст способности.
Я бы делал через 2 разные абилки с одной и той же позицией в интерфейсе. Пока нужный тебе юнит не является частью отряда - у него таргетная абилка при касте которой на капитана он добавляется в группу соответствующего капитана и получает 2ю абилку взамен первой.
Касательно выделения этих пехотинцев - можно намутить что-то с передачей контроля или создать триггер, который будет снимать выделение с юнитов у которых есть 2я абилка. Если ты хочешь чтобы по одиночке можно было выделять пехотинцев - можешь создать переменную для каждого игрока с капитанами, куда будет просто записываться последний выбранный юнит. При снятии выделения - проверять не выбран ли этот же юнит, в случае чего не снимать выделение. Правда не уверен будет ли корректно работать :> В крайнем случае - будет работать в три клика вместо двух. Если я не ошибаюсь.
Касательно поведения этих пехотинцев - что-то реально стоящее сделать сложно. Возможно, но мне не с руки все расписывать :> Простейший вариант - приказывать пехотинцам после добавления в группу следовать за капитаном.
Добавление через атаку капитана
Триггер, проверяющий что капитан получил урон или атакован, как угодно. Далее любым способом проверяешь есть ли в группе этого капитана юниты. Если нет - выбираешь всех пехотинцев N радиусе, добавляешь в отряд, заменяешь абилку/либо просто приказываешь кастануть в капитана первую абилку.
Если как в Diablo, то я когда-то такую систему делал. Пишу по памяти. Нужно создать несколько переменных:
логические (их количество = количеству порталов) - определяют, можно ли перемещаться в данную точку
диалог - показывает доступные порталы
диалоговые кнопки (их количество тоже = количеству порталов) - при их нажатии идёт перемещение в нужный портал
точки (количество точек = количеству порталов) - куда именно перемещается герой. Лучше делать локальными, чтоб в памяти не висели.
На карте в местах порталов нужно создать небольшие области, при входе в которые будет показываться диалог.
Для активации порталов можно делать проверку при входе в область (логическая переменная). Если портал неактивен (переменная = нет), то установить переменную = да (то есть доступность портала).
Далее показывается диалог, где показываются кнопки активных порталов. При нажатии переносит в соответствующую точку. При переносе лучше отключить триггер, реагирующий на вход в область и включить после перехода.
Ещё варианты: вместо использования логических переменных проверять условие (например, жизнь конкретного юнита в области типа "портал" = Х; у конкретного юнита в области типа "портал" есть определённая способность-пустышка; если портал - декорация, то проверять её прочность); вместо диалога сделать выбор в панели способностей юнита-портала (типа как у магазина, причём переход можно сделать платным).
Вариантов можно много придумать, в общем.
А если нужен переход с карты на карту, то можно посмотреть в той же кампании, как это сделано.
Ещё есть интересная статья, информацию из которой у меня всё руки не доходят применить - xgm.guru/p/wc3/transitions-tutorial.
у каждого формата свой алгоритм,вот из за этого такая разница ,особенно на вес блп влияет прозрачность что лутше прозрачные места которые не затрагивает меш красить чёрным цветом
Zhenya17, ты хотя бы основные статьи прочти и учебник 1 класса по логике
какой по твоему должна быть применяемая способность если способность никто не применяет?
когда прочтёшь то пикай на карте нужных тебе героев и удаляй у них нужную тебе способность
Если во всех картах одинаковый id, значит покопайся в хеше.
Это как, можно в личку?
Проблему решил, переделав стандартную способность, а не создавая нестандартную. Это почти что панацея от подобных случаев, когда id (ещё называют raw-code) способности меняется.
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя
SetUnitPosition довольно тяжелая операци, юзайте SetUnitX\Y в конце полета юзай SetUnitPosition для того чтобы юнит не залетел в непроходимое место.
Фильтр просто ужас, ну кто так фильтры делает?
Проверка на 'Aloc', я в ужасе на кой черт проверять на дамми если GropEnumUnitsInRange\Rect не выделяет москитов, тока EnumOfPlayer может пикнуть москитов, остальное не пикает их, на то они и москиты...
Вот как выглядит нормальный фильтр без локалок и прочего
function EnemyFilter takes nothing returns boolean
set bj_lastFilterUnit = GetFilterUnit( )
return GetUnitState( bj_lastFilterUnit, UNIT_STATE_LIFE ) > 0.405 and IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and not( IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MAGIC_IMMUNE ) or IsUnitType( bj_lastFilterUnit, UNIT_TYPE_MECHANICAL ) or IsUnitInvulnerable( bj_lastFilterUnit ) )
endfunction
UnitDamageTargetEx - красиво но нафиг ненужно обводить в отдельную функцию с тучей аргументов + жутко неудобно, 100500 аргументов у функции и фиг знает за что какой от вечает, прямо так UnitDamageTarget, без отдельной функции.
Туча констант, тоже хорошо тока длят наработок, на деле ставь конкретные значения или юзай Difine vjass'a.
Обсуждалось 100500 раз, 1 символ кириллицы считается за 2 символа латиницы.
Пишем вместо Пepeзаpядкa Пepeзаpядкa (выигрыш 5 символов) , описание предмета у героя в инвентаре очень очень короткое, буквально 4 строчки. рус символы eng
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
Существует лимит то ли на кол-во операций, то ли на время выполнения, то ли и на то и на другое. При превышении лимита поток молча рубится.
В качестве шаманства: попробуй завернуть каждый цикл в отдельную функцию. Врядли это поможет само по себе, но зато потом проще будет переходить к следующему шагу - разнесению на отдельные потоки.
Проблема возникает также при переносе вот этого вот в инициализацию триггера тест.
Но при этом если вместо строки вроде "12345" использовать, например, GetAbilityName('Aloc') - то все работает.
Это какой-то баг со строками?
Еще у меня почему-то происходит фантомный клик по центру карты в начале игры
Вобщем не стоит юзать имена функций напрямую в экзекуте и вообще таймеры лучше
Способность "Техника" имеет прикреплённые к ней спецэффекты шипов через одноимённое заклинание (тоже "Техника").
Почему шипы видны только на "больших героях"? - потому что у них есть особые точки крепления аттачей, маунт-справа/слева (на подобии нога-левая, рука-правая).
Как убрать? - логика подсказывает что нужно зачистить соответствующие поля в эффекте "Техника", что собственно и верно... и нет...
Дело в том что скилл "Техника" относится к тем, которые имеют ошибку с изменением графических параметров в РО. (меняешь, а оно всё равно по старому отображается - например тёмная стая, стадо ящерец).
Что же делать? - берёшь стандартную технику, смотришь её стандартный эффект. Удаляешь из стандартного эффекта всю графику (теперь техника не будет давать шипы). Копируешь стандартную технику - вот твой новый скилл который уже не будет давать шипов. Готово. Работаешь с новой копией.
Нужна особая анимация, смотри внимательно анимации гулей и мясников, там вроде spell channel, у волков нету такой анимации, так что либо кастом проигрывай анимацию атаки либо делай свою модель волка с нужными анимациями, на основе стандартной.
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
Рунные браслеты давать тем, на ком хочешь распознать тип урона(лучше всем сразу). Нет не надо... просто событие на отлов урона с проверкой что урон меньше 0 и сразу нанести такой же урон только больше 0( так как все заклинания с нанесением урона будут исцелять).
Проще говоря "браслеты", это как детект на то, что урон не может исцелять, а поскольку браслеты реагируют только на маг урон, соответсвенно любой "исцеляющий урон" и есть магическим.
Это давно обсуждалось. вопрос удаление события
Создание триггер события — 3 утечки. Стереть переменный триггер, и минус 1. Получается остается 2 утечки.
Вот если удалить юнита (Remove unit), то он стирается из события другого триггера?
наличия триггера на получение урона для каждого юнита
так делать нельзя
это же полный бред
просто добавляем событие к уже существующему триггеру вот и всё
нормального сборщика мусора в варе нет и скорее всего не будет(если близы даже рб поленились убрать то о нормальном gc можно забыть)
так же не стоит забывать что сборщик мусора срабатывает не сразу
если мне не изменяет память то save сохраняет объекты и значения переменных
а при загрузке восстанавливает связи (заносит значения в переменные, регистрирует события и прочее)
так что всякий мусор просто не проходит
а вообще лучше забей на это
в варе есть более серьёзные утечки от которых нельзя избавиться
например руны
+ создание и удаление триггеров вредит намного больше чем пара сотен килобайт памяти
да и вряд ли у тебя за игру будет 50к юнитов
События триггера никак нельзя удалить, можно только удалить триггер (с кондишенами и акшенами).
А кстати вот - xgm.guru/p/wc3/venomanser
Будет несомненно полезно, как правильно удалять триггеры.
Да и вовсе полезно для общего развития.
Второй комп сломан поэтому проверить не могу, почему у меня подозрение, что оно должно работать.... Хотя могу и ошибаться, нормально делал карты года 2 назад.
скрин ошибки со строкой на которую ругается
а сори, плохо прочитал код Tobi123 дело говорит
ты даже не знаешь что такое локальные переменные
короче в статьи и не вылазь от туда пока не узнаешь
Только с мемхаком, нужно подгрузить свою ддлку, которая грубо говоря от имени хоста сама хостанет следующую карту, пригласив всех игроков.
Но думаю это не так уж и просто реализуемо, а те функции что есть - только для одиночной кампании.
локальный - на машине конкретного юзера, не путать с mui/mpi (муи - действует для каждого юнита, mpi - для каждого игрока)
все баффы будут действовать, хоть их там будет штук 100 (хотя я столько еще не вешал)
тоже самое касается и тригго баффов, которые легко реализовать с помощью запрещенного спеллбука и как сказал quq_CCCP - таймера
даже если бафф не отображается, но его точно вешали на юнита - система его найдет
а если ты пытаешься сделать бафф Palus Knight из Lineage II - поиграйся с отрицательным по урону берсерком (где кстати есть и скорость бега), или со спеллом свитка скорости
хотя легче будет просто обложить юнита блокираторами прохода на время действия, потому что полную остановку сделать без костылей не удастся
Отключить прочие способности - если этот параметр включен то при касте канала ты не можешь двигаться и юзать скилы. Следовать в течении времени - точно не знаю,но предполагаю что это длительность приказа или длительность самой способности. Тип цели - если "Цель - точка" ,то можно юзать куда угодно кроме юнитов. Если "Цель - юнит", тоже самое только на оборот.Если оба то можно кастовать и на юнита и на точку.Если"Нет цели", то способность активируется без наведения(как стомп например)
Параметры:
Изображение - отображение иконки скила
Изображение указателя - Если установить эту галку, то еще понадобится установить "Характеристики: Область воздействия" на не-нулевую величину. (например, 200). Когда вы будете прицеливаться заклинанием, на карте будет круг такого радиуса, которого вы установили(Вспомним свена из доты,круг радиуса есть,а юзать можно только на юнитов)
Материальное заклинание - при установленной галке "Изображение указателя цели" и области воздействия, равной 0, будет исчезать указатель цели, если не установлена эта галка
Универсальное заклинание - Если эта галка стоит, то заклинание будет действовать на существ, невосприимчивых к магии, если не стоит, то при касте на неуязвимого к магии юнита (например, голема) вы получите сообщение типа "Этот воин невосприимчив к магии"
Только ручное применение - Этот параметр определяет как будет использоватся заклинание если отдать приказ сразу группе юнитов с этой способностью. Если эта галка стоит, то способность использует только один из группы, если нет - то сразу вся группа.
Создаёшь массивы с координатами позиций, с типами юнитов, с самими юнитами. Если юнит из переменной помирает - создаёшь нового, заносишь в переменную вместо убитого и даёшь приказ двигаться в соответствующую точку.
Событие - получает прдмет
Условие - прдмет который надо
Действие - Создать юнит, либо замнетить(прверащение): так же вариант, когда подбирает нужный предмет, давать скил трансформа и приказать его заюать
Таурен Тауреныч, так ты ж его мгновенно удаляешь. Зачем добавлять и сразу убирать способность? Или удаляется предмет, а не скилл?
Попробуй удалять хотя бы через 0.00 сек.
Прочитал твой второй вопрос по этой теме. Всё-таки да, дело было в мгновенном удалении.
Способности нужно дать юниту, и все. Если эффект временный, используем вэйт/wait (по-русски ждать) или таймеры, по истечении которого удаляем способность. Но вэйты не рекомендуются для использования.
событие - юнит применяет способность
условие -применяемая способность == тип твоей способности
действие - добавить способность
ждать 15 сек.
действие - удалить способность
TeX13, можно, сделано в доте для варкравта...
Способов реализации много, от 'ANeg' (способность механика, Enginering Upgrade, рус-Техника), которым можно свапать скиллы, до таймеров которые будут удалять способность у героя а потом вручать ему снова, таким образом скидывая кулдаун, ну и так же хак на пямять, с помощью которого можно менять кулдаун как захочется, щяс все кому не лень юзают эту наработку.
Патиссончик, про центр области не заметил
точка каждый раз создаётся заново и это утечка Патиссончик, есть прога на сайте для записи логов
так же есть дебаг через прелоад на сайте
вот счётчик утечек
Проблема в том, что, если в этой точке построено здание, то IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY) не помогает (это терраин проверяет, а вот то что там построено или нет ему пофиг). Посмотрел в триггерах, есть только текстуры земли - уберспласты (там эти текстурки для здания) - нет функции такой в библиотеке jngp для проверки точки. Пробовал через группу, но там своя заминка (походу выборка ловит тех юнитов, точки которых попали в выборку, а не на целиком. Точно не проверял, но не работает с группой), Clamp, решил через проверку
if (IssueBuildOrderById(YT, 'hhou', x, y) == false) then если не может построить, значит там здание или что-нибудь еще. Clamp, помог еще твоя ссылка ExecuteFunc. видимо у меня лимит был, не хотело работать (просто дебаг не отобрал. и раб стоял). Хотя это уже не нужно было
А да слегка подвисает на секунду =(
Урра короче без лагов сделал (версия 3), подредактировать недоработку и будет норм
Нашёл систему, где звук передаётся в таймер, который истекает через 0 секунд. В результате один и тот же звук может проигрываться несколько раз без всяких проблем. В инетике пишут мол это такой баг движка.
Вместо (юнит триггера) вставишь своего героя. (Скрин внизу)
Редактор обьектов ---> Способности ---> нейтрально-враждебные ---> герои ---> повышение характеристик (редактируешь или создаешь нестандартную и редактируешь под себя)
GRESHNIK1, я хз как ты пробовал
у меня всё работает нормально
плавающий юнит не может быть создан на суше
у тебя же корабль скорее всего не является плавающим т.е. не является кораблём
Делал из корабля из компании. Просьба залить пример, чтобы понять что я делаю не так.
» WarCraft 3 / Триггерные порталы
» WarCraft 3 / Помогите с созданием этого спелла
» WarCraft 3 / Порталы
» WarCraft 3 / Перевод карты
» WarCraft 3 / Как временно удалить способность у героя?
» WarCraft 3 / Бесконечные герои
» WarCraft 3 / Вопрос по циклам
» WarCraft 3 / Цвет текста предмета
» WarCraft 3 / Как вставить изображение?
» WarCraft 3 / Доступность способности
» WarCraft 3 / String Hash
» WarCraft 3 / Существует ли карта способностей?
» WarCraft 3 / Как изменить тип передвижения юнита?
» WarCraft 3 / Урон от способности
» WarCraft 3 / графика способности
» WarCraft 3 / Как сделать Способность по области.
» WarCraft 3 / Как обычному юниту дать способность героя?
» WarCraft 3 / удаление событий
» WarCraft 3 / Локальный тригер
» WarCraft 3 / Несколько интересующих вопросов
» WarCraft 3 / Получение предмета
» WarCraft 3 / Перезарядка предмета
» WarCraft 3 / Как циклом удалять точки
» WarCraft 3 / Как удалить переменную типа юнит?
» WarCraft 3 / Как бы это сделать?